From: Simon McVittie Date: Wed, 28 Jan 2026 11:00:00 +0000 (+0000) Subject: d/patches/libgvc: Update libgvc to prevent crashes with newer Pipewire X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~49 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=5e9f52811cea6f13a7fc6b47a6951be58f525f49;p=gnome-shell.git d/patches/libgvc: Update libgvc to prevent crashes with newer Pipewire This updates it to 47c47a42 (2026-01-23) which is the latest version, and the version currently used in gnome-shell's main branch. Closes: #1126514 --- diff --git a/debian/patches/libgvc/mixer-control-Always-sync-devices.patch b/debian/patches/libgvc/mixer-control-Always-sync-devices.patch new file mode 100644 index 000000000..38d18bf58 --- /dev/null +++ b/debian/patches/libgvc/mixer-control-Always-sync-devices.patch @@ -0,0 +1,45 @@ +From: =?utf-8?q?Guido_G=C3=BCnther?= +Date: Sun, 4 Jan 2026 13:07:28 +0100 +Subject: mixer-control: Always sync devices +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +This ensures any changes ports get updated, otherwise we'll fail +to match the updated port. + +Signed-off-by: Guido Günther +Origin: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/merge_requests/31 +Bug: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/issues/34 +Bug-Debian: https://bugs.debian.org/1126514 +Applied-upstream: gnome-shell 50, commit:798230599950607ec285daecd070f5bcb28580e4 +--- + subprojects/gvc/gvc-mixer-control.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/subprojects/gvc/gvc-mixer-control.c b/subprojects/gvc/gvc-mixer-control.c +index a6aaf2e..74f9193 100644 +--- a/subprojects/gvc/gvc-mixer-control.c ++++ b/subprojects/gvc/gvc-mixer-control.c +@@ -1507,6 +1507,10 @@ update_sink (GvcMixerControl *control, + gvc_mixer_stream_set_base_volume (stream, (guint32) info->base_volume); + gvc_mixer_stream_set_state (stream, translate_pa_state (info->state)); + ++ /* Sync devices as the port on the stream might have changed */ ++ if (!is_new) ++ sync_devices (control, stream); ++ + /* Messy I know but to set the port everytime regardless of whether it has changed will cost us a + * port change notify signal which causes the frontend to resync. + * Only update the UI when something has changed. */ +@@ -1638,6 +1642,10 @@ update_source (GvcMixerControl *control, + gvc_mixer_stream_set_base_volume (stream, (guint32) info->base_volume); + g_debug ("update source"); + ++ /* Sync devices as the port on the stream might have changed */ ++ if (!is_new) ++ sync_devices (control, stream); ++ + if (info->active_port != NULL) { + if (is_new) + gvc_mixer_stream_set_port (stream, info->active_port->name); diff --git a/debian/patches/libgvc/mixer-control-Always-update-port-list.patch b/debian/patches/libgvc/mixer-control-Always-update-port-list.patch new file mode 100644 index 000000000..b6afa1a6b --- /dev/null +++ b/debian/patches/libgvc/mixer-control-Always-update-port-list.patch @@ -0,0 +1,133 @@ +From: =?utf-8?q?Guido_G=C3=BCnther?= +Date: Sun, 4 Jan 2026 13:07:27 +0100 +Subject: mixer-control: Always update port list +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +It can change underneath us, see + + https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/5053 + +Signed-off-by: Guido Günther +Origin: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/merge_requests/31 +Bug: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/issues/34 +Bug-Debian: https://bugs.debian.org/1126514 +Applied-upstream: gnome-shell 50, commit:798230599950607ec285daecd070f5bcb28580e4 +--- + subprojects/gvc/gvc-mixer-control.c | 57 +++++++++++++++++-------------------- + 1 file changed, 26 insertions(+), 31 deletions(-) + +diff --git a/subprojects/gvc/gvc-mixer-control.c b/subprojects/gvc/gvc-mixer-control.c +index e5b6ca9..a6aaf2e 100644 +--- a/subprojects/gvc/gvc-mixer-control.c ++++ b/subprojects/gvc/gvc-mixer-control.c +@@ -1451,6 +1451,7 @@ update_sink (GvcMixerControl *control, + pa_volume_t max_volume; + GvcChannelMap *map; + char map_buff[PA_CHANNEL_MAP_SNPRINT_MAX]; ++ GList *list = NULL; + + pa_channel_map_snprint (map_buff, PA_CHANNEL_MAP_SNPRINT_MAX, &info->channel_map); + #if 1 +@@ -1467,27 +1468,10 @@ update_sink (GvcMixerControl *control, + GUINT_TO_POINTER (info->index)); + + if (stream == NULL) { +- GList *list = NULL; +- guint i; +- + map = gvc_channel_map_new_from_pa_channel_map (&info->channel_map); + stream = gvc_mixer_sink_new (control->priv->pa_context, + info->index, + map); +- +- for (i = 0; i < info->n_ports; i++) { +- GvcMixerStreamPort *port; +- +- port = g_slice_new0 (GvcMixerStreamPort); +- port->port = g_strdup (info->ports[i]->name); +- port->human_port = g_strdup (info->ports[i]->description); +- port->priority = info->ports[i]->priority; +- port->available = info->ports[i]->available != PA_PORT_AVAILABLE_NO; +- +- list = g_list_prepend (list, port); +- } +- gvc_mixer_stream_set_ports (stream, list); +- + g_object_unref (map); + is_new = TRUE; + +@@ -1497,6 +1481,19 @@ update_sink (GvcMixerControl *control, + return; + } + ++ for (guint i = 0; i < info->n_ports; i++) { ++ GvcMixerStreamPort *port; ++ ++ port = g_slice_new0 (GvcMixerStreamPort); ++ port->port = g_strdup (info->ports[i]->name); ++ port->human_port = g_strdup (info->ports[i]->description); ++ port->priority = info->ports[i]->priority; ++ port->available = info->ports[i]->available != PA_PORT_AVAILABLE_NO; ++ ++ list = g_list_prepend (list, port); ++ } ++ gvc_mixer_stream_set_ports (stream, g_steal_pointer (&list)); ++ + max_volume = pa_cvolume_max (&info->volume); + gvc_mixer_stream_set_name (stream, info->name); + gvc_mixer_stream_set_card_index (stream, info->card); +@@ -1584,6 +1581,7 @@ update_source (GvcMixerControl *control, + GvcMixerStream *stream; + gboolean is_new; + pa_volume_t max_volume; ++ GList *list = NULL; + + #if 1 + g_debug ("Updating source: index=%u name='%s' description='%s'", +@@ -1602,26 +1600,12 @@ update_source (GvcMixerControl *control, + stream = g_hash_table_lookup (control->priv->sources, + GUINT_TO_POINTER (info->index)); + if (stream == NULL) { +- GList *list = NULL; +- guint i; + GvcChannelMap *map; + + map = gvc_channel_map_new_from_pa_channel_map (&info->channel_map); + stream = gvc_mixer_source_new (control->priv->pa_context, + info->index, + map); +- +- for (i = 0; i < info->n_ports; i++) { +- GvcMixerStreamPort *port; +- +- port = g_slice_new0 (GvcMixerStreamPort); +- port->port = g_strdup (info->ports[i]->name); +- port->human_port = g_strdup (info->ports[i]->description); +- port->priority = info->ports[i]->priority; +- list = g_list_prepend (list, port); +- } +- gvc_mixer_stream_set_ports (stream, list); +- + g_object_unref (map); + is_new = TRUE; + } else if (gvc_mixer_stream_is_running (stream)) { +@@ -1630,6 +1614,17 @@ update_source (GvcMixerControl *control, + return; + } + ++ for (guint i = 0; i < info->n_ports; i++) { ++ GvcMixerStreamPort *port; ++ ++ port = g_slice_new0 (GvcMixerStreamPort); ++ port->port = g_strdup (info->ports[i]->name); ++ port->human_port = g_strdup (info->ports[i]->description); ++ port->priority = info->ports[i]->priority; ++ list = g_list_prepend (list, port); ++ } ++ gvc_mixer_stream_set_ports (stream, list); ++ + max_volume = pa_cvolume_max (&info->volume); + + gvc_mixer_stream_set_name (stream, info->name); diff --git a/debian/patches/libgvc/mixer-control-Check-for-invalid-input.patch b/debian/patches/libgvc/mixer-control-Check-for-invalid-input.patch new file mode 100644 index 000000000..545954653 --- /dev/null +++ b/debian/patches/libgvc/mixer-control-Check-for-invalid-input.patch @@ -0,0 +1,45 @@ +From: =?utf-8?q?Guido_G=C3=BCnther?= +Date: Sun, 4 Jan 2026 17:39:03 +0100 +Subject: mixer-control: Check for invalid input +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +With pipewire 1.5.84 there can be a zombie default-source as the +current profile can't have a stream, see + +https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/5053#note_3256202 + +Signed-off-by: Guido Günther +Origin: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/merge_requests/31 +Bug: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/issues/34 +Bug-Debian: https://bugs.debian.org/1126514 +Applied-upstream: gnome-shell 50, commit:798230599950607ec285daecd070f5bcb28580e4 +--- + subprojects/gvc/gvc-mixer-control.c | 13 ++++++++----- + 1 file changed, 8 insertions(+), 5 deletions(-) + +diff --git a/subprojects/gvc/gvc-mixer-control.c b/subprojects/gvc/gvc-mixer-control.c +index b45f15a..251f78a 100644 +--- a/subprojects/gvc/gvc-mixer-control.c ++++ b/subprojects/gvc/gvc-mixer-control.c +@@ -980,11 +980,14 @@ _set_default_source (GvcMixerControl *control, + new_id); + + input = gvc_mixer_control_lookup_device_from_stream (control, stream); +- +- g_signal_emit (G_OBJECT (control), +- signals[ACTIVE_INPUT_UPDATE], +- 0, +- gvc_mixer_ui_device_get_id (input)); ++ if (input) { ++ g_signal_emit (G_OBJECT (control), ++ signals[ACTIVE_INPUT_UPDATE], ++ 0, ++ gvc_mixer_ui_device_get_id (input)); ++ } else { ++ g_warning ("Can't find input for stream-id %d",new_id); ++ } + } + } + diff --git a/debian/patches/libgvc/mixer-control-Clear-stream-ids-from-UI-devices-when-BT-st.patch b/debian/patches/libgvc/mixer-control-Clear-stream-ids-from-UI-devices-when-BT-st.patch new file mode 100644 index 000000000..41f3bb0fe --- /dev/null +++ b/debian/patches/libgvc/mixer-control-Clear-stream-ids-from-UI-devices-when-BT-st.patch @@ -0,0 +1,170 @@ +From: =?utf-8?q?Guido_G=C3=BCnther?= +Date: Sun, 4 Jan 2026 15:18:12 +0100 +Subject: mixer-control: Clear stream-ids from UI devices when BT stream loses + all ports +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +Bluetooth streams can become portless so we can't just unconditionally add a +new UI device for devices without streams. Instead reset stream-ids from +existing streams that reference the stream that just became portless. + +Signed-off-by: Guido Günther +Origin: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/merge_requests/31 +Bug: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/issues/34 +Bug-Debian: https://bugs.debian.org/1126514 +Applied-upstream: gnome-shell 50, commit:798230599950607ec285daecd070f5bcb28580e4 +--- + subprojects/gvc/gvc-mixer-control.c | 64 ++++++++++++++++++++++++++++++++++--- + 1 file changed, 59 insertions(+), 5 deletions(-) + +diff --git a/subprojects/gvc/gvc-mixer-control.c b/subprojects/gvc/gvc-mixer-control.c +index 6653d94..b45f15a 100644 +--- a/subprojects/gvc/gvc-mixer-control.c ++++ b/subprojects/gvc/gvc-mixer-control.c +@@ -1285,6 +1285,35 @@ match_stream_with_devices (GvcMixerControl *control, + return in_possession; + } + ++ ++/* Clear stream-id from all UI devices that reference the stream that lost all ports */ ++static void ++clear_stream_from_devices (GvcMixerControl *control, ++ GvcMixerStream *stream) ++{ ++ g_autoptr (GList) devices = NULL; ++ guint stream_id; ++ ++ stream_id = gvc_mixer_stream_get_id (stream); ++ devices = g_hash_table_get_values (GVC_IS_MIXER_SOURCE (stream) ? control->priv->ui_inputs : control->priv->ui_outputs); ++ ++ for (GList *d = devices; d != NULL; d = d->next) { ++ guint device_stream_id; ++ GvcMixerUIDevice *device = d->data; ++ ++ g_object_get (G_OBJECT (device), ++ "stream-id", &device_stream_id, ++ NULL); ++ ++ if (device_stream_id == stream_id) { ++ g_object_set (G_OBJECT (device), ++ "stream-id", GVC_MIXER_UI_DEVICE_INVALID, ++ NULL); ++ g_debug ("Clearing stream-id: %d", stream_id); ++ } ++ } ++} ++ + /* + * This method attempts to match a sink or source with its relevant UI device. + * GvcMixerStream can represent both a sink or source. +@@ -1305,7 +1334,8 @@ match_stream_with_devices (GvcMixerControl *control, + */ + static void + sync_devices (GvcMixerControl *control, +- GvcMixerStream* stream) ++ GvcMixerStream* stream, ++ gboolean is_bluetooth) + { + /* Go through ports to see what outputs can be created. */ + const GList *stream_ports; +@@ -1314,6 +1344,11 @@ sync_devices (GvcMixerControl *control, + + stream_ports = gvc_mixer_stream_get_ports (stream); + ++ if (stream_ports == NULL && is_bluetooth) { ++ clear_stream_from_devices (control, stream); ++ return; ++ } ++ + if (stream_ports == NULL) { + GvcMixerUIDevice *device; + GObject *object; +@@ -1425,6 +1460,20 @@ translate_pa_state (pa_sink_state_t state) { + } + } + ++static gboolean ++is_bluetooth (const pa_proplist *proplist) ++{ ++ const char *bus = pa_proplist_gets (proplist, "device.bus"); ++ ++ if (bus == NULL) ++ return FALSE; ++ ++ if (g_str_equal ("bluetooth", bus)) ++ return TRUE; ++ ++ return FALSE; ++} ++ + /* + * Called when anything changes with a sink. + */ +@@ -1438,6 +1487,7 @@ update_sink (GvcMixerControl *control, + GvcChannelMap *map; + char map_buff[PA_CHANNEL_MAP_SNPRINT_MAX]; + GList *list = NULL; ++ gboolean is_bt; + + pa_channel_map_snprint (map_buff, PA_CHANNEL_MAP_SNPRINT_MAX, &info->channel_map); + #if 1 +@@ -1493,9 +1543,10 @@ update_sink (GvcMixerControl *control, + gvc_mixer_stream_set_base_volume (stream, (guint32) info->base_volume); + gvc_mixer_stream_set_state (stream, translate_pa_state (info->state)); + ++ is_bt = is_bluetooth (info->proplist); + /* Sync devices as the port on the stream might have changed */ + if (!is_new) +- sync_devices (control, stream); ++ sync_devices (control, stream, is_bt); + + /* Messy I know but to set the port everytime regardless of whether it has changed will cost us a + * port change notify signal which causes the frontend to resync. +@@ -1524,7 +1575,7 @@ update_sink (GvcMixerControl *control, + add_stream (control, stream); + /* Always sync on a new stream to able to assign the right stream id + * to the appropriate outputs (multiple potential outputs per stream). */ +- sync_devices (control, stream); ++ sync_devices (control, stream, is_bt); + } else { + g_signal_emit (G_OBJECT (control), + signals[STREAM_CHANGED], +@@ -1564,6 +1615,7 @@ update_sink (GvcMixerControl *control, + gvc_channel_map_volume_changed (map, &info->volume, FALSE); + } + ++ + static void + update_source (GvcMixerControl *control, + const pa_source_info *info) +@@ -1572,6 +1624,7 @@ update_source (GvcMixerControl *control, + gboolean is_new; + pa_volume_t max_volume; + GList *list = NULL; ++ gboolean is_bt; + + #if 1 + g_debug ("Updating source: index=%u name='%s' description='%s'", +@@ -1628,9 +1681,10 @@ update_source (GvcMixerControl *control, + gvc_mixer_stream_set_base_volume (stream, (guint32) info->base_volume); + g_debug ("update source"); + ++ is_bt = is_bluetooth (info->proplist); + /* Sync devices as the port on the stream might have changed */ + if (!is_new) +- sync_devices (control, stream); ++ sync_devices (control, stream, is_bt); + + if (info->active_port != NULL) { + if (is_new) +@@ -1652,7 +1706,7 @@ update_source (GvcMixerControl *control, + GUINT_TO_POINTER (info->index), + g_object_ref (stream)); + add_stream (control, stream); +- sync_devices (control, stream); ++ sync_devices (control, stream, is_bt); + } else { + g_signal_emit (G_OBJECT (control), + signals[STREAM_CHANGED], diff --git a/debian/patches/libgvc/mixer-control-Don-t-emit-output-update-on-default-sink-se.patch b/debian/patches/libgvc/mixer-control-Don-t-emit-output-update-on-default-sink-se.patch new file mode 100644 index 000000000..6b9ba4098 --- /dev/null +++ b/debian/patches/libgvc/mixer-control-Don-t-emit-output-update-on-default-sink-se.patch @@ -0,0 +1,40 @@ +From: =?utf-8?q?Guido_G=C3=BCnther?= +Date: Sun, 4 Jan 2026 13:39:05 +0100 +Subject: mixer-control: Don't emit output-update on default-sink set +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +Don't emit the signal when setting. It will be emitted when the sink +actually changes. This makes things consistent with switching the +default source. + +Signed-off-by: Guido Günther +Origin: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/merge_requests/31 +Bug: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/issues/34 +Bug-Debian: https://bugs.debian.org/1126514 +Applied-upstream: gnome-shell 50, commit:798230599950607ec285daecd070f5bcb28580e4 +--- + subprojects/gvc/gvc-mixer-control.c | 9 +-------- + 1 file changed, 1 insertion(+), 8 deletions(-) + +diff --git a/subprojects/gvc/gvc-mixer-control.c b/subprojects/gvc/gvc-mixer-control.c +index 7cdb909..e5b6ca9 100644 +--- a/subprojects/gvc/gvc-mixer-control.c ++++ b/subprojects/gvc/gvc-mixer-control.c +@@ -617,14 +617,7 @@ gvc_mixer_control_change_output (GvcMixerControl *control, + + if (!gvc_mixer_ui_device_has_ports (output)) { + g_debug ("Did we try to move to a software/bluetooth sink ?"); +- if (gvc_mixer_control_set_default_sink (control, stream)) { +- /* sink change was successful, update the UI.*/ +- g_signal_emit (G_OBJECT (control), +- signals[ACTIVE_OUTPUT_UPDATE], +- 0, +- gvc_mixer_ui_device_get_id (output)); +- } +- else { ++ if (!gvc_mixer_control_set_default_sink (control, stream)) { + g_warning ("Failed to set default sink with stream from output %s", + gvc_mixer_ui_device_get_description (output)); + } diff --git a/debian/patches/libgvc/mixer-control-Don-t-lie-about-found-devices.patch b/debian/patches/libgvc/mixer-control-Don-t-lie-about-found-devices.patch new file mode 100644 index 000000000..848b553a0 --- /dev/null +++ b/debian/patches/libgvc/mixer-control-Don-t-lie-about-found-devices.patch @@ -0,0 +1,33 @@ +From: =?utf-8?q?Guido_G=C3=BCnther?= +Date: Sun, 4 Jan 2026 13:07:25 +0100 +Subject: mixer-control: Don't lie about found devices +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +We should only print that a device wasn't found when it is actually +the case. + +Signed-off-by: Guido Günther +Origin: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/merge_requests/31 +Bug: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/issues/34 +Bug-Debian: https://bugs.debian.org/1126514 +Applied-upstream: gnome-shell 50, commit:798230599950607ec285daecd070f5bcb28580e4 +--- + subprojects/gvc/gvc-mixer-control.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/subprojects/gvc/gvc-mixer-control.c b/subprojects/gvc/gvc-mixer-control.c +index 383a74f..7cdb909 100644 +--- a/subprojects/gvc/gvc-mixer-control.c ++++ b/subprojects/gvc/gvc-mixer-control.c +@@ -289,7 +289,8 @@ gvc_mixer_control_lookup_device_from_stream (GvcMixerControl *control, + } + } + +- g_debug ("lookup-device-from-stream - Could not find a device for stream '%s'", gvc_mixer_stream_get_description (stream)); ++ if (!ret) ++ g_debug ("lookup-device-from-stream - Could not find a device for stream '%s'", gvc_mixer_stream_get_description (stream)); + + g_list_free (devices); + diff --git a/debian/patches/libgvc/mixer-control-Fix-typos-and-remove-trailing-whitespace.patch b/debian/patches/libgvc/mixer-control-Fix-typos-and-remove-trailing-whitespace.patch new file mode 100644 index 000000000..46d72bf7b --- /dev/null +++ b/debian/patches/libgvc/mixer-control-Fix-typos-and-remove-trailing-whitespace.patch @@ -0,0 +1,65 @@ +From: =?utf-8?q?Guido_G=C3=BCnther?= +Date: Sun, 4 Jan 2026 13:07:22 +0100 +Subject: mixer-control: Fix typos and remove trailing whitespace +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +Signed-off-by: Guido Günther +Origin: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/merge_requests/31 +Bug: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/issues/34 +Bug-Debian: https://bugs.debian.org/1126514 +Applied-upstream: gnome-shell 50, commit:798230599950607ec285daecd070f5bcb28580e4 +--- + subprojects/gvc/gvc-mixer-control.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/subprojects/gvc/gvc-mixer-control.c b/subprojects/gvc/gvc-mixer-control.c +index 5704270..e326346 100644 +--- a/subprojects/gvc/gvc-mixer-control.c ++++ b/subprojects/gvc/gvc-mixer-control.c +@@ -532,7 +532,7 @@ gvc_mixer_control_get_stream_from_device (GvcMixerControl *control, + * @profile: (allow-none): Can be %NULL if any profile present on this port is okay + * + * Returns: This method will attempt to swap the profile on the card of +- * the device with given profile name. If successfull it will set the ++ * the device with given profile name. If successful it will set the + * preferred profile on that device so as we know the next time the user + * moves to that device it should have this profile active. + */ +@@ -584,7 +584,7 @@ gvc_mixer_control_change_profile_on_selected_device (GvcMixerControl *control, + * - Firstly it queries the stream from the device. + * - It assumes that if the stream is null that it cannot be a bluetooth or network stream (they never show unless they have valid sinks and sources) + * In the scenario of a NULL stream on the device +- * - It fetches the device's preferred profile or if NUll the profile with the highest priority on that device. ++ * - It fetches the device's preferred profile or if NULL the profile with the highest priority on that device. + * - It then caches this device in control->priv->cached_desired_output_id so that when the update_sink triggered + * from when we attempt to change profile we will know exactly what device to highlight on that stream. + * - It attempts to swap the profile on the card from that device and returns. +@@ -675,7 +675,7 @@ gvc_mixer_control_change_output (GvcMixerControl *control, + * - Firstly it queries the stream from the device. + * - It assumes that if the stream is null that it cannot be a bluetooth or network stream (they never show unless they have valid sinks and sources) + * In the scenario of a NULL stream on the device +- * - It fetches the device's preferred profile or if NUll the profile with the highest priority on that device. ++ * - It fetches the device's preferred profile or if NULL the profile with the highest priority on that device. + * - It then caches this device in control->priv->cached_desired_input_id so that when the update_source triggered + * from when we attempt to change profile we will know exactly what device to highlight on that stream. + * - It attempts to swap the profile on the card from that device and returns. +@@ -1542,7 +1542,7 @@ update_sink (GvcMixerControl *control, + GUINT_TO_POINTER (info->index), + g_object_ref (stream)); + add_stream (control, stream); +- /* Always sink on a new stream to able to assign the right stream id ++ /* Always sync on a new stream to able to assign the right stream id + * to the appropriate outputs (multiple potential outputs per stream). */ + sync_devices (control, stream); + } else { +@@ -1971,7 +1971,7 @@ update_ui_device_on_port_added (GvcMixerControl *control, + gvc_mixer_ui_device_get_id (uidevice)); + } + +- g_debug ("update_ui_device_on_port_added, direction %u, description '%s', origin '%s', port available %i", ++ g_debug ("update_ui_device_on_port_added, direction %u, description '%s', origin '%s', port available %i", + direction, + port->human_port, + gvc_mixer_card_get_name (card), diff --git a/debian/patches/libgvc/mixer-control-Let-sink-update-handle-active-output-change.patch b/debian/patches/libgvc/mixer-control-Let-sink-update-handle-active-output-change.patch new file mode 100644 index 000000000..c6a3ba75b --- /dev/null +++ b/debian/patches/libgvc/mixer-control-Let-sink-update-handle-active-output-change.patch @@ -0,0 +1,50 @@ +From: =?utf-8?q?Guido_G=C3=BCnther?= +Date: Sun, 4 Jan 2026 13:07:29 +0100 +Subject: mixer-control: Let sink update handle active output change +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +A signal is emitted when the output changes so don't set it right away +as the stream might change port. + +Signed-off-by: Guido Günther +Origin: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/merge_requests/31 +Bug: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/issues/34 +Bug-Debian: https://bugs.debian.org/1126514 +Applied-upstream: gnome-shell 50, commit:798230599950607ec285daecd070f5bcb28580e4 +--- + subprojects/gvc/gvc-mixer-control.c | 18 +++--------------- + 1 file changed, 3 insertions(+), 15 deletions(-) + +diff --git a/subprojects/gvc/gvc-mixer-control.c b/subprojects/gvc/gvc-mixer-control.c +index 74f9193..45ae314 100644 +--- a/subprojects/gvc/gvc-mixer-control.c ++++ b/subprojects/gvc/gvc-mixer-control.c +@@ -639,23 +639,11 @@ gvc_mixer_control_change_output (GvcMixerControl *control, + + /* Finally if we are not on the correct stream, swap over. */ + if (stream != default_stream) { +- GvcMixerUIDevice* device; +- + g_debug ("Attempting to swap over to stream %s ", + gvc_mixer_stream_get_description (stream)); +- if (gvc_mixer_control_set_default_sink (control, stream)) { +- device = gvc_mixer_control_lookup_device_from_stream (control, stream); +- g_signal_emit (G_OBJECT (control), +- signals[ACTIVE_OUTPUT_UPDATE], +- 0, +- gvc_mixer_ui_device_get_id (device)); +- } else { +- /* If the move failed for some reason reset the UI. */ +- device = gvc_mixer_control_lookup_device_from_stream (control, default_stream); +- g_signal_emit (G_OBJECT (control), +- signals[ACTIVE_OUTPUT_UPDATE], +- 0, +- gvc_mixer_ui_device_get_id (device)); ++ if (!gvc_mixer_control_set_default_sink (control, stream)) { ++ g_warning ("Failed to set default sink from output %s", ++ gvc_mixer_ui_device_get_description (output)); + } + } + } diff --git a/debian/patches/libgvc/mixer-control-Let-source-update-handle-active-output-chan.patch b/debian/patches/libgvc/mixer-control-Let-source-update-handle-active-output-chan.patch new file mode 100644 index 000000000..3c940bcae --- /dev/null +++ b/debian/patches/libgvc/mixer-control-Let-source-update-handle-active-output-chan.patch @@ -0,0 +1,47 @@ +From: =?utf-8?q?Guido_G=C3=BCnther?= +Date: Sun, 4 Jan 2026 13:07:30 +0100 +Subject: mixer-control: Let source update handle active output change +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +A signal is emitted when the output changes so don't set it right away +as the stream might change port. + +This also brings set_default_source in line with set_default_sink() + +Signed-off-by: Guido Günther +Origin: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/merge_requests/31 +Bug: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/issues/34 +Bug-Debian: https://bugs.debian.org/1126514 +Applied-upstream: gnome-shell 50, commit:798230599950607ec285daecd070f5bcb28580e4 +--- + subprojects/gvc/gvc-mixer-control.c | 8 -------- + 1 file changed, 8 deletions(-) + +diff --git a/subprojects/gvc/gvc-mixer-control.c b/subprojects/gvc/gvc-mixer-control.c +index 45ae314..b8198d3 100644 +--- a/subprojects/gvc/gvc-mixer-control.c ++++ b/subprojects/gvc/gvc-mixer-control.c +@@ -341,7 +341,6 @@ gboolean + gvc_mixer_control_set_default_source (GvcMixerControl *control, + GvcMixerStream *stream) + { +- GvcMixerUIDevice* input; + pa_operation *o; + + g_return_val_if_fail (GVC_IS_MIXER_CONTROL (control), FALSE); +@@ -373,13 +372,6 @@ gvc_mixer_control_set_default_source (GvcMixerControl *control, + + pa_operation_unref (o); + +- /* source change successful, update the UI. */ +- input = gvc_mixer_control_lookup_device_from_stream (control, stream); +- g_signal_emit (G_OBJECT (control), +- signals[ACTIVE_INPUT_UPDATE], +- 0, +- gvc_mixer_ui_device_get_id (input)); +- + return TRUE; + } + diff --git a/debian/patches/libgvc/mixer-control-Print-error-when-we-fail-to-set-default-sou.patch b/debian/patches/libgvc/mixer-control-Print-error-when-we-fail-to-set-default-sou.patch new file mode 100644 index 000000000..088715db1 --- /dev/null +++ b/debian/patches/libgvc/mixer-control-Print-error-when-we-fail-to-set-default-sou.patch @@ -0,0 +1,34 @@ +From: =?utf-8?q?Guido_G=C3=BCnther?= +Date: Sun, 4 Jan 2026 13:36:27 +0100 +Subject: mixer-control: Print error when we fail to set default source +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +Makes is consistent with error handling for setting default sink + +Signed-off-by: Guido Günther +Origin: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/merge_requests/31 +Bug: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/issues/34 +Bug-Debian: https://bugs.debian.org/1126514 +Applied-upstream: gnome-shell 50, commit:798230599950607ec285daecd070f5bcb28580e4 +--- + subprojects/gvc/gvc-mixer-control.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/subprojects/gvc/gvc-mixer-control.c b/subprojects/gvc/gvc-mixer-control.c +index 15eb5e8..acac0ca 100644 +--- a/subprojects/gvc/gvc-mixer-control.c ++++ b/subprojects/gvc/gvc-mixer-control.c +@@ -729,7 +729,10 @@ gvc_mixer_control_change_input (GvcMixerControl *control, + if (stream != default_stream) { + g_debug ("change-input - attempting to swap over to stream %s", + gvc_mixer_stream_get_description (stream)); +- gvc_mixer_control_set_default_source (control, stream); ++ if (!gvc_mixer_control_set_default_source (control, stream)) { ++ g_warning ("Failed to set default source from input %s", ++ gvc_mixer_ui_device_get_description (input)); ++ } + } + } + diff --git a/debian/patches/libgvc/mixer-control-Print-error-when-we-fail-to-update-source-o.patch b/debian/patches/libgvc/mixer-control-Print-error-when-we-fail-to-update-source-o.patch new file mode 100644 index 000000000..49bbb679a --- /dev/null +++ b/debian/patches/libgvc/mixer-control-Print-error-when-we-fail-to-update-source-o.patch @@ -0,0 +1,44 @@ +From: =?utf-8?q?Guido_G=C3=BCnther?= +Date: Sun, 4 Jan 2026 13:07:24 +0100 +Subject: mixer-control: Print error when we fail to update source or sink + port +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +Since we allow for port lookups to fail we should check if the update +worked. + +Signed-off-by: Guido Günther +Origin: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/merge_requests/31 +Bug: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/issues/34 +Bug-Debian: https://bugs.debian.org/1126514 +Applied-upstream: gnome-shell 50, commit:798230599950607ec285daecd070f5bcb28580e4 +--- + subprojects/gvc/gvc-mixer-control.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/subprojects/gvc/gvc-mixer-control.c b/subprojects/gvc/gvc-mixer-control.c +index f41c2c1..15eb5e8 100644 +--- a/subprojects/gvc/gvc-mixer-control.c ++++ b/subprojects/gvc/gvc-mixer-control.c +@@ -1525,7 +1525,8 @@ update_sink (GvcMixerControl *control, + if (active_port == NULL || + g_strcmp0 (active_port->port, info->active_port->name) != 0) { + g_debug ("update sink - apparently a port update"); +- gvc_mixer_stream_set_port (stream, info->active_port->name); ++ if (!gvc_mixer_stream_set_port (stream, info->active_port->name)) ++ g_warning ("Port update to of %d '%s' failed", info->index, info->active_port->name); + } + } + } +@@ -1654,7 +1655,8 @@ update_source (GvcMixerControl *control, + if (active_port == NULL || + g_strcmp0 (active_port->port, info->active_port->name) != 0) { + g_debug ("update source - apparently a port update"); +- gvc_mixer_stream_set_port (stream, info->active_port->name); ++ if (!gvc_mixer_stream_set_port (stream, info->active_port->name)) ++ g_warning ("Port update to of %d '%s' failed", info->index, info->active_port->name); + } + } + } diff --git a/debian/patches/libgvc/mixer-control-Print-port-names-with-profiles.patch b/debian/patches/libgvc/mixer-control-Print-port-names-with-profiles.patch new file mode 100644 index 000000000..b8b100e44 --- /dev/null +++ b/debian/patches/libgvc/mixer-control-Print-port-names-with-profiles.patch @@ -0,0 +1,35 @@ +From: =?utf-8?q?Guido_G=C3=BCnther?= +Date: Sun, 4 Jan 2026 13:07:23 +0100 +Subject: mixer-control: Print port names with profiles +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +Other debug code uses port names instead of the description so +this simplifies debugging. + +Signed-off-by: Guido Günther +Origin: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/merge_requests/31 +Bug: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/issues/34 +Bug-Debian: https://bugs.debian.org/1126514 +Applied-upstream: gnome-shell 50, commit:798230599950607ec285daecd070f5bcb28580e4 +--- + subprojects/gvc/gvc-mixer-control.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/subprojects/gvc/gvc-mixer-control.c b/subprojects/gvc/gvc-mixer-control.c +index 6d425dd..f41c2c1 100644 +--- a/subprojects/gvc/gvc-mixer-control.c ++++ b/subprojects/gvc/gvc-mixer-control.c +@@ -1914,9 +1914,9 @@ determine_profiles_for_port (pa_card_port_info *port, + supported_profiles = g_list_append (supported_profiles, prof); + } + } +- g_debug ("%i profiles supported on port %s", ++ g_debug ("%i profiles supported on port %s / %s", + g_list_length (supported_profiles), +- port->description); ++ port->description, port->name); + return g_list_sort (supported_profiles, (GCompareFunc) gvc_mixer_card_profile_compare); + } + diff --git a/debian/patches/libgvc/mixer-control-Reset-stream-id-s-on-UI-devices.patch b/debian/patches/libgvc/mixer-control-Reset-stream-id-s-on-UI-devices.patch new file mode 100644 index 000000000..95bbdf926 --- /dev/null +++ b/debian/patches/libgvc/mixer-control-Reset-stream-id-s-on-UI-devices.patch @@ -0,0 +1,80 @@ +From: =?utf-8?q?Guido_G=C3=BCnther?= +Date: Sun, 4 Jan 2026 13:07:31 +0100 +Subject: mixer-control: Reset `stream-id`s on UI devices +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +If we find a matching UI device for a stream matching card and +port and the same stream is also on another port, reset that +UI devices `stream-id`. + +Since wireplumber 1.5.84 will merely flip the port but not the +`stream-id` we need to make sure the UI device loses its stream-id. +Otherwise `gvc_mixer_control_change_output` will try a +`gvc_mixer_stream_change_port` which seemingly succeeds but fails +silently as the port doesn't exist on that stream at the moment. + +By resetting the `stream-id` we ensure that we take the +`gvc_mixer_control_change_profile_on_selected_device` code path in +`gvc_mixer_control_change_output` instead and thus the sink/port +gets properly selected. + +Signed-off-by: Guido Günther +Origin: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/merge_requests/31 +Bug: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/issues/34 +Bug-Debian: https://bugs.debian.org/1126514 +Applied-upstream: gnome-shell 50, commit:798230599950607ec285daecd070f5bcb28580e4 +--- + subprojects/gvc/gvc-mixer-control.c | 36 +++++++++++++++++++++--------------- + 1 file changed, 21 insertions(+), 15 deletions(-) + +diff --git a/subprojects/gvc/gvc-mixer-control.c b/subprojects/gvc/gvc-mixer-control.c +index b8198d3..6653d94 100644 +--- a/subprojects/gvc/gvc-mixer-control.c ++++ b/subprojects/gvc/gvc-mixer-control.c +@@ -1257,23 +1257,29 @@ match_stream_with_devices (GvcMixerControl *control, + stream_port->port, + stream_card_id); + +- if (stream_card_id == card_id && +- g_strcmp0 (device_port_name, stream_port->port) == 0) { +- g_debug ("Match device with stream: We have a match with description: '%s', origin: '%s', cached already with device id %u, so set stream id to %i", +- description, +- origin, +- gvc_mixer_ui_device_get_id (device), +- stream_id); +- +- g_object_set (G_OBJECT (device), +- "stream-id", stream_id, +- NULL); +- in_possession = TRUE; ++ if (stream_card_id == card_id) { ++ if (g_strcmp0 (device_port_name, stream_port->port) == 0) { ++ g_debug ("Match device with stream: We have a match with description: '%s', origin: '%s', cached already with device id %u, so set stream id to %i", ++ description, ++ origin, ++ gvc_mixer_ui_device_get_id (device), ++ stream_id); ++ ++ g_object_set (G_OBJECT (device), ++ "stream-id", stream_id, ++ NULL); ++ in_possession = TRUE; ++ } else { ++ /* Other UI devices on that card that match the stream can't be valid */ ++ if (device_stream_id == stream_id) { ++ g_object_set (G_OBJECT (device), ++ "stream-id", GVC_MIXER_UI_DEVICE_INVALID, ++ NULL); ++ g_debug ("Found another UI device for this stream: %d, resetting", stream_id); ++ } ++ } + } + } +- +- if (in_possession == TRUE) +- break; + } + + return in_possession; diff --git a/debian/patches/libgvc/mixer-control-Simplify-device-lookup.patch b/debian/patches/libgvc/mixer-control-Simplify-device-lookup.patch new file mode 100644 index 000000000..27f0f098d --- /dev/null +++ b/debian/patches/libgvc/mixer-control-Simplify-device-lookup.patch @@ -0,0 +1,100 @@ +From: =?utf-8?q?Guido_G=C3=BCnther?= +Date: Mon, 5 Jan 2026 17:15:40 +0100 +Subject: mixer-control: Simplify device lookup +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +There were too branches, one for portless streams (called "network +streams" here) and those with ports. The portless one checked the +stream-id only while the other branch checked stream-id and port. + +Simplify this by checking the stream-id and only comparing ports when +available. + +As other streams can be portless nowadays this also removes some +confusion. + +Best reviewed with 'git show -w' + +Signed-off-by: Guido Günther +Origin: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/merge_requests/31 +Bug: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/issues/34 +Bug-Debian: https://bugs.debian.org/1126514 +Applied-upstream: gnome-shell 50, commit:798230599950607ec285daecd070f5bcb28580e4 +--- + subprojects/gvc/gvc-mixer-control.c | 42 ++++++++++++++++++------------------- + 1 file changed, 20 insertions(+), 22 deletions(-) + +diff --git a/subprojects/gvc/gvc-mixer-control.c b/subprojects/gvc/gvc-mixer-control.c +index 251f78a..a8c75a0 100644 +--- a/subprojects/gvc/gvc-mixer-control.c ++++ b/subprojects/gvc/gvc-mixer-control.c +@@ -239,7 +239,6 @@ gvc_mixer_control_lookup_device_from_stream (GvcMixerControl *control, + GvcMixerStream *stream) + { + GList *devices, *d; +- gboolean is_network_stream; + const GList *ports; + GvcMixerUIDevice *ret; + +@@ -253,39 +252,38 @@ gvc_mixer_control_lookup_device_from_stream (GvcMixerControl *control, + + ret = NULL; + ports = gvc_mixer_stream_get_ports (stream); +- is_network_stream = (ports == NULL); + + for (d = devices; d != NULL; d = d->next) { + GvcMixerUIDevice *device = d->data; + guint stream_id = G_MAXUINT; ++ const GvcMixerStreamPort *port; + + g_object_get (G_OBJECT (device), + "stream-id", &stream_id, + NULL); + +- if (is_network_stream && +- stream_id == gvc_mixer_stream_get_id (stream)) { +- g_debug ("lookup-device-from-stream - %s - it is a network_stream ", ++ if (stream_id != gvc_mixer_stream_get_id (stream)) ++ continue; ++ ++ if (ports == NULL) { ++ g_debug ("lookup-device-from-stream - %s - is portless ", + gvc_mixer_ui_device_get_description (device)); + ret = device; + break; +- } else if (!is_network_stream) { +- const GvcMixerStreamPort *port; +- port = gvc_mixer_stream_get_port (stream); +- +- if (stream_id == gvc_mixer_stream_get_id (stream) && +- g_strcmp0 (gvc_mixer_ui_device_get_port (device), +- port->port) == 0) { +- g_debug ("lookup-device-from-stream found device: device description '%s', device port = '%s', device stream id %i AND stream port = '%s' stream id '%u' and stream description '%s'", +- gvc_mixer_ui_device_get_description (device), +- gvc_mixer_ui_device_get_port (device), +- stream_id, +- port->port, +- gvc_mixer_stream_get_id (stream), +- gvc_mixer_stream_get_description (stream)); +- ret = device; +- break; +- } ++ } ++ ++ port = gvc_mixer_stream_get_port (stream); ++ if (g_strcmp0 (gvc_mixer_ui_device_get_port (device), port->port) == 0) { ++ g_debug ("lookup-device-from-stream found device: device description '%s', device port = '%s', device stream id %i AND stream port = '%s' stream id '%u' and stream description '%s'", ++ gvc_mixer_ui_device_get_description (device), ++ gvc_mixer_ui_device_get_port (device), ++ stream_id, ++ port->port, ++ gvc_mixer_stream_get_id (stream), ++ gvc_mixer_stream_get_description (stream)); ++ ret = device; ++ break; ++ + } + } + diff --git a/debian/patches/libgvc/mixer-control-Use-automatic-cleanup-in-match_stream_with_.patch b/debian/patches/libgvc/mixer-control-Use-automatic-cleanup-in-match_stream_with_.patch new file mode 100644 index 000000000..c96803e8d --- /dev/null +++ b/debian/patches/libgvc/mixer-control-Use-automatic-cleanup-in-match_stream_with_.patch @@ -0,0 +1,64 @@ +From: =?utf-8?q?Guido_G=C3=BCnther?= +Date: Sun, 4 Jan 2026 13:07:23 +0100 +Subject: mixer-control: Use automatic cleanup in match_stream_with_devices +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +Simplifies the loop + +Signed-off-by: Guido Günther +Origin: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/merge_requests/31 +Bug: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/issues/34 +Bug-Debian: https://bugs.debian.org/1126514 +Applied-upstream: gnome-shell 50, commit:798230599950607ec285daecd070f5bcb28580e4 +--- + subprojects/gvc/gvc-mixer-control.c | 15 +++++---------- + 1 file changed, 5 insertions(+), 10 deletions(-) + +diff --git a/subprojects/gvc/gvc-mixer-control.c b/subprojects/gvc/gvc-mixer-control.c +index e326346..6d425dd 100644 +--- a/subprojects/gvc/gvc-mixer-control.c ++++ b/subprojects/gvc/gvc-mixer-control.c +@@ -1235,7 +1235,7 @@ match_stream_with_devices (GvcMixerControl *control, + GvcMixerStreamPort *stream_port, + GvcMixerStream *stream) + { +- GList *devices, *d; ++ g_autoptr (GList) devices = NULL; + guint stream_card_id; + guint stream_id; + gboolean in_possession = FALSE; +@@ -1245,12 +1245,12 @@ match_stream_with_devices (GvcMixerControl *control, + + devices = g_hash_table_get_values (GVC_IS_MIXER_SOURCE (stream) ? control->priv->ui_inputs : control->priv->ui_outputs); + +- for (d = devices; d != NULL; d = d->next) { ++ for (GList *d = devices; d != NULL; d = d->next) { + GvcMixerUIDevice *device; + guint device_stream_id; +- gchar *device_port_name; +- gchar *origin; +- gchar *description; ++ g_autofree gchar *device_port_name = NULL; ++ g_autofree gchar *origin = NULL; ++ g_autofree gchar *description = NULL; + GvcMixerCard *card; + guint card_id; + +@@ -1295,15 +1295,10 @@ match_stream_with_devices (GvcMixerControl *control, + } + } + +- g_free (device_port_name); +- g_free (origin); +- g_free (description); +- + if (in_possession == TRUE) + break; + } + +- g_list_free (devices); + return in_possession; + } + diff --git a/debian/patches/libgvc/mixer-control-Use-consistent-debug-prefix.patch b/debian/patches/libgvc/mixer-control-Use-consistent-debug-prefix.patch new file mode 100644 index 000000000..f77abac7b --- /dev/null +++ b/debian/patches/libgvc/mixer-control-Use-consistent-debug-prefix.patch @@ -0,0 +1,41 @@ +From: =?utf-8?q?Guido_G=C3=BCnther?= +Date: Sun, 4 Jan 2026 13:07:24 +0100 +Subject: mixer-control: Use consistent debug prefix +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +The debug statements all used different prefixes making it harder than +needed to grep for them + +Signed-off-by: Guido Günther +Origin: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/merge_requests/31 +Bug: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/issues/34 +Bug-Debian: https://bugs.debian.org/1126514 +Applied-upstream: gnome-shell 50, commit:798230599950607ec285daecd070f5bcb28580e4 +--- + subprojects/gvc/gvc-mixer-control.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/subprojects/gvc/gvc-mixer-control.c b/subprojects/gvc/gvc-mixer-control.c +index acac0ca..383a74f 100644 +--- a/subprojects/gvc/gvc-mixer-control.c ++++ b/subprojects/gvc/gvc-mixer-control.c +@@ -265,7 +265,7 @@ gvc_mixer_control_lookup_device_from_stream (GvcMixerControl *control, + + if (is_network_stream && + stream_id == gvc_mixer_stream_get_id (stream)) { +- g_debug ("lookup device from stream - %s - it is a network_stream ", ++ g_debug ("lookup-device-from-stream - %s - it is a network_stream ", + gvc_mixer_ui_device_get_description (device)); + ret = device; + break; +@@ -289,7 +289,7 @@ gvc_mixer_control_lookup_device_from_stream (GvcMixerControl *control, + } + } + +- g_debug ("gvc_mixer_control_lookup_device_from_stream - Could not find a device for stream '%s'",gvc_mixer_stream_get_description (stream)); ++ g_debug ("lookup-device-from-stream - Could not find a device for stream '%s'", gvc_mixer_stream_get_description (stream)); + + g_list_free (devices); + diff --git a/debian/patches/libgvc/mixer-stream-Allow-ports-to-not-exist.patch b/debian/patches/libgvc/mixer-stream-Allow-ports-to-not-exist.patch new file mode 100644 index 000000000..5eeb21af4 --- /dev/null +++ b/debian/patches/libgvc/mixer-stream-Allow-ports-to-not-exist.patch @@ -0,0 +1,36 @@ +From: =?utf-8?q?Guido_G=C3=BCnther?= +Date: Sun, 4 Jan 2026 13:07:26 +0100 +Subject: mixer-stream: Allow ports to not exist +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +With pipewire 1.5.84 the port list might change underneath us, +see + + https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/5053 + +We thus can't assume anymore that we find a given port. + +Signed-off-by: Guido Günther +Origin: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/merge_requests/31 +Bug: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/issues/34 +Bug-Debian: https://bugs.debian.org/1126514 +Applied-upstream: gnome-shell 50, commit:798230599950607ec285daecd070f5bcb28580e4 +--- + subprojects/gvc/gvc-mixer-stream.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/subprojects/gvc/gvc-mixer-stream.c b/subprojects/gvc/gvc-mixer-stream.c +index f9bcc40..0382817 100644 +--- a/subprojects/gvc/gvc-mixer-stream.c ++++ b/subprojects/gvc/gvc-mixer-stream.c +@@ -532,8 +532,6 @@ gvc_mixer_stream_get_port (GvcMixerStream *stream) + } + } + +- g_assert_not_reached (); +- + return NULL; + } + diff --git a/debian/patches/libgvc/mixer-stream-Allow-to-update-port-list.patch b/debian/patches/libgvc/mixer-stream-Allow-to-update-port-list.patch new file mode 100644 index 000000000..f45d4734d --- /dev/null +++ b/debian/patches/libgvc/mixer-stream-Allow-to-update-port-list.patch @@ -0,0 +1,36 @@ +From: =?utf-8?q?Guido_G=C3=BCnther?= +Date: Sun, 4 Jan 2026 13:07:26 +0100 +Subject: mixer-stream: Allow to update port list +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +Signed-off-by: Guido Günther +Origin: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/merge_requests/31 +Bug: https://gitlab.gnome.org/GNOME/libgnome-volume-control/-/issues/34 +Bug-Debian: https://bugs.debian.org/1126514 +Applied-upstream: gnome-shell 50, commit:798230599950607ec285daecd070f5bcb28580e4 +--- + subprojects/gvc/gvc-mixer-stream.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/subprojects/gvc/gvc-mixer-stream.c b/subprojects/gvc/gvc-mixer-stream.c +index 0382817..83963cc 100644 +--- a/subprojects/gvc/gvc-mixer-stream.c ++++ b/subprojects/gvc/gvc-mixer-stream.c +@@ -624,9 +624,13 @@ gvc_mixer_stream_set_ports (GvcMixerStream *stream, + GList *ports) + { + g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE); +- g_return_val_if_fail (stream->priv->ports == NULL, FALSE); + +- stream->priv->ports = g_list_sort (ports, (GCompareFunc) sort_ports); ++ if (stream->priv->ports) { ++ g_list_free_full (stream->priv->ports, (GDestroyNotify) free_port); ++ stream->priv->ports = NULL; ++ } ++ if (ports) ++ stream->priv->ports = g_list_sort (ports, (GCompareFunc) sort_ports); + + return TRUE; + } diff --git a/debian/patches/series b/debian/patches/series index 12f356c35..25480eb71 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,4 +1,22 @@ Revert-main-Register-session-with-GDM-on-startup.patch +libgvc/mixer-control-Fix-typos-and-remove-trailing-whitespace.patch +libgvc/mixer-control-Use-automatic-cleanup-in-match_stream_with_.patch +libgvc/mixer-control-Print-port-names-with-profiles.patch +libgvc/mixer-control-Print-error-when-we-fail-to-update-source-o.patch +libgvc/mixer-control-Print-error-when-we-fail-to-set-default-sou.patch +libgvc/mixer-control-Use-consistent-debug-prefix.patch +libgvc/mixer-control-Don-t-lie-about-found-devices.patch +libgvc/mixer-control-Don-t-emit-output-update-on-default-sink-se.patch +libgvc/mixer-stream-Allow-ports-to-not-exist.patch +libgvc/mixer-stream-Allow-to-update-port-list.patch +libgvc/mixer-control-Always-update-port-list.patch +libgvc/mixer-control-Always-sync-devices.patch +libgvc/mixer-control-Let-sink-update-handle-active-output-change.patch +libgvc/mixer-control-Let-source-update-handle-active-output-chan.patch +libgvc/mixer-control-Reset-stream-id-s-on-UI-devices.patch +libgvc/mixer-control-Clear-stream-ids-from-UI-devices-when-BT-st.patch +libgvc/mixer-control-Check-for-invalid-input.patch +libgvc/mixer-control-Simplify-device-lookup.patch shell-app-Warn-instead-of-crashing-if-disposed-before-sta.patch debian/Revert-tests-Fail-on-warnings-too.patch debian/data-Add-im-config.desktop-to-System-folder.patch